home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 2: CDPD 1 / Almathera Ten on Ten - Disc 2: CDPD 1.iso / pd / 351-375 / 359 / dice / dice.lzh / lib / amiga / path.c < prev    next >
C/C++ Source or Header  |  1990-03-27  |  932b  |  52 lines

  1.  
  2. /*
  3.  *  PATH.C
  4.  *
  5.  *  (c)Copyright 1990, Matthew Dillon, All Rights Reserved
  6.  *
  7.  *  Search the path for a command name
  8.  */
  9.  
  10. #include <exec/types.h>
  11. #include <exec/execbase.h>
  12. #include <libraries/dos.h>
  13. #include <libraries/dosextens.h>
  14. #include <stdio.h>
  15. #include <lib/bcpl.h>
  16.  
  17. typedef struct CommandLineInterface CLI;
  18. typedef struct Process Process;
  19.  
  20. typedef struct LockList {
  21.     BPTR    NextPath;
  22.     BPTR    PathLock;
  23. } LockList;
  24.  
  25. extern struct ExecBase *SysBase;
  26.  
  27. BPTR
  28. _SearchPath(cmd)
  29. char *cmd;
  30. {
  31.     CLI *cli = BTOC(((Process *)SysBase->ThisTask)->pr_CLI, CLI);
  32.     LockList *ll = BTOC(cli->cli_CommandDir, LockList);
  33.  
  34.     while (ll) {
  35.     if (ll->PathLock) {
  36.         long oldLock = CurrentDir(ll->PathLock);
  37.         long lock;
  38.  
  39.         if (lock = Lock(cmd, SHARED_LOCK)) {
  40.         UnLock(lock);
  41.         CurrentDir(oldLock);
  42.         return(ll->PathLock);
  43.         }
  44.         CurrentDir(oldLock);
  45.     }
  46.     ll = BTOC(ll->NextPath, LockList);
  47.     }
  48.     return(NULL);
  49. }
  50.  
  51.  
  52.